package com.carrental.crm.dto;

import lombok.Data;

import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.Future;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 优惠券数据传输对象
 */
@Data
public class CouponDTO implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键ID
     */
    private Long id;

    /**
     * 优惠券名称
     */
    @NotBlank(message = "优惠券名称不能为空")
    private String name;

    /**
     * 优惠券类型（1-满减券，2-折扣券，3-直减券）
     */
    @NotNull(message = "优惠券类型不能为空")
    private Integer type;

    /**
     * 优惠金额
     */
    @DecimalMin(value = "0.01", message = "优惠金额必须大于0")
    private BigDecimal amount;

    /**
     * 折扣率
     */
    @DecimalMin(value = "0.01", message = "折扣率必须大于0")
    private BigDecimal discountRate;

    /**
     * 使用门槛（满多少金额可用）
     */
    @DecimalMin(value = "0", message = "使用门槛必须大于等于0")
    private BigDecimal threshold;

    /**
     * 适用车型，多个车型ID用逗号分隔
     */
    private String applicableVehicles;

    /**
     * 适用门店，多个门店ID用逗号分隔
     */
    private String applicableStores;

    /**
     * 有效期开始时间
     */
    @NotNull(message = "有效期开始时间不能为空")
    private LocalDateTime startTime;

    /**
     * 有效期结束时间
     */
    @NotNull(message = "有效期结束时间不能为空")
    @Future(message = "有效期结束时间必须是将来的时间")
    private LocalDateTime endTime;

    /**
     * 优惠券状态（1-未发放，2-已发放，3-已过期）
     */
    private Integer status;

    /**
     * 发放数量
     */
    @NotNull(message = "发放数量不能为空")
    private Integer issueCount;

    /**
     * 优惠券描述
     */
    private String description;

    /**
     * 创建人ID
     */
    private Long creatorId;

    /**
     * 创建人姓名
     */
    private String creatorName;
} 